/*************************************************************************
    > File Name    : ThreadPool.h
    > Author       : LiuLei
    > Mail         : 2261459486@qq.com 
    > Created Time : 2022年11月24日 星期四 22时06分15秒
 ************************************************************************/

#ifndef __LL_THREADPOOL_H__
#define __LL_THREADPOOL_H__

#include "Thread.h"
#include "TaskQueue.h"
#include <vector>
#include <memory>
using std::vector;
using std::unique_ptr;

using Task = function<void()>;                              //任务，直接用函数来表示

class ThreadPool
{
public:
    ThreadPool(size_t threadNumber, size_t queueSize);
    ~ThreadPool();

    void start();
    void stop();

    void addTask(const Task &task);
    void addTask(Task &&task);
    
private:
    Task getTask();
    void threadFunc();

private:
    size_t                          _threadNumber;          //线程数目              
    vector<unique_ptr<Thread>>      _threads;               //线程容器              
    size_t                          _queueSize;             //任务队列大小          
    TaskQueue                       _taskQueue;             //任务队列              
    bool                            _isExitTP;              //线程池是否退出的标志位
};

#endif
